﻿package biz.almas.common.timer;

import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.log4j.Logger;

/**
 * @Description: 抽象定时任务
 * @Copyright: Copyright (c) 2015 XinJiang Almas Software All Rights Reserved
 * @Company: XinJiang Almas Software
 * @author Ansar786 Nov 19, 2015
 * @version V1.0
 * @history:
 * 
 */
public abstract class AbstractTimerTask {

	// 定义日志输出对象
	public static Logger logger = Logger.getLogger(AbstractTimerTask.class);

	protected Timer timer = new Timer();
	protected boolean isRunning = false;

	/**
	 * 开始定时任务, 尽量不要重写
	 */
	public void start() {
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				if (isRunning) {
					logger.info("上一次任务还没完成呢!");
					return;
				}
				isRunning = true;
				try {
					execute();
				} catch (Exception e) {
					logger.error(e.toString());
				}
				isRunning = false;
			}
		}, delay(), period());// 延迟0微秒开始执行，周期的单位也是微秒
	}

	/**
	 * 取消任务, 尽量不要重写
	 */
	public void cancel() {
		if (timer != null) {
			timer.cancel();
			logger.info("取消定时任务了！");
		}
	}

	/**
	 * 默认延迟0秒，可根据实际需要进行重写 ，单位是微秒
	 */
	protected long delay() {
		return 0;
	}

	/**
	 * 周期，可根据实际需要进行重写 ，单位是微秒
	 */
	protected abstract long period();

	/**
	 * 定时任务，在干什么呢？
	 */
	protected abstract void execute() throws IOException;

}
